import org.junit.Test;

import java.security.PublicKey;

/**
 * @description:字符类的特性
 * @author:Mr.Cat
 * @create:2021-09-25 16:15
 **/
public class StringTest {
    /*
    * 结论：
    * 1、常量与常量的拼接结构在常量池，且常量池中不会存在相同内存的常量
    * 2、只要其中有一个是变量，结果在堆中
    * 3、如果拼接的结果调用intern()方法，返回值就这常量池中。
    * */
    @Test
    public void test1(){
    String s1="abc";
    String s2="abc";
    s1="hello";
        System.out.println(s1 == s2);
        System.out.println(s1);
        System.out.println(s1);

        System.out.println("------------");

        String s3="abc";
        s3+="def";
        System.out.println(s3);//
        System.out.println(s2);

        System.out.println("------------");

        String s4="abc";
        s4.replace('a','m');
        }
    @Test
    public void test2(){
        //通过字面量定义的方式：此时的s1和s2的数据javaEE声明在常量池
        String s1="javaEE";
        String s2="javaEE";
        //通过new+构造器的方式：此时的s3和s4保存的地址值，是数据在对空间中开辟空间以后对应的地址值
        String s3= new String("javaEE");
        String s4=new String("javaEE");
        System.out.println(s1==s2);//true
        System.out.println(s1==s3);//false
        System.out.println(s1==s4);//false
        System.out.println(s3==s4);//false
    }
    @Test
    public void test3(){
        String s1="javaEE";
        String s2="hadoop";

        String s3="javaEEhadoop";
        String s4="javaEE"+"hadoop";

        String s5=s1+"hadoop";
        String s6="javaEE"+s2;
        String s7=s1+s2;
        System.out.println(s3==s4);//true
        System.out.println(s3==s5);//false
        System.out.println(s3==s6);//false
        System.out.println(s3==s7);//false
        System.out.println(s5==s6);//false
        System.out.println(s5==s7);//false
        System.out.println(s6==s7);//false

        String s8=s5.intern();//返回值得到的s8使用的常量值中已经存在的"JavaEEhadoop"
        System.out.println(s3==s8);//true

    }
    @Test
    public void testsize(){
        int a[]=new int[10];
        a[0]=1;
        System.out.println(a.length);
    }
}

